Arduino

Arduino有着各种版本,是一个基于易用硬件和软件的开源电子平台。它适用于任何进行交互式项目的人,便捷灵活、方便上手。由于其简单易用的用户体验,Arduino已被用于数千个不同的项目和应用程序。Arduino软件易于初学者使用,对高级用户而言足够灵活。它可以在Mac,Windows和Linux上运行。

  • 价格低廉 - 与其他微控制器平台相比,Arduino板相对便宜。最便宜的Arduino模块可以手工组装,甚至预先组装的Arduino模块也不到50美元。
  • 跨平台 - Arduino软件(IDE)可在Windows,Macintosh OSX和Linux操作系统上运行。大多数微控制器系统仅限于Windows。
  • 简单,清晰的编程环境 - Arduino软件(IDE)易于初学者使用,同时又具有足够的灵活性,可供高级用户利用。对于教师来说,它可以方便地基于Processing编程环境,因此学习在该环境中编程的学生将熟悉Arduino IDE的工作原理。
  • 开源和可扩展软件 - Arduino软件作为开源工具发布,可供有经验的程序员使用。可以通过C ++库扩展语言,想要了解技术细节的人可以从Arduino跳转到它所基于的AVR C编程语言。同样,如果您愿意,可以将AVR-C代码直接添加到Arduino程序中。
  • 开源和可扩展硬件 - Arduino板的计划在Creative Commons许可下发布,因此经验丰富的电路设计人员可以制作自己的模块版本,扩展并改进。即使是相对缺乏经验的用户也可以构建模块的面包板版本,以便了解它的工作原理并节省资金。

Arduino Nano 33 BLE Sense

Arduino系列新增四款Nano板

从左到右为:Every、33 IoT、33 BLE、BLE Sense。

Arduino Nano Every板卡

  • MCU–Microchip ATMega4809 AVR 单片机@20 MHz,拥有48KB flash, 6KB SRAM, 256 Bytes EEPROM;
  • USB-通过Microchip ATSAMD11D14A Arm Cortex-M0+USB单片机实现的USB转串口;
  • 2x15-pin拓展口包含GPIO,SPI,I2C, USART,PWM,ADC,DAC,复位,以及电源脚 (+5V, +3.3V, GND, Vin, AREF, …);
  • 尺寸-与原来的 Arduino Nano兼容;

Arduino Nano 33 IoT板卡

  • MCU–Arm Cortex-M0+内核的Microchip SAMD21G18A单片机@最高48MHz拥有256KB Flash,32KB SRAM
  • 无线模块–NINA W102 ESP32 WiFI+蓝牙模块通过SPI和串口与SAMD21单片机连接
  • 2x15-pin拓展口包含GPIO,SPI,I2C,USART,PWM,ADC,DAC,复位,以及电源脚(+5V,+3.3V,GND,Vin,AREF, …)
  • 传感器–6轴加速度计和陀螺仪
  • 硬件加密模块–Microchip ATECC608A 安全加密芯片
  • 调试–通过micro USB口, 也支持6-pin SWD接口
  • 尺寸-与原来的Arduino Nano兼容

Arduino Nano 33 BLE板卡

  • 无线模块–基于Nordic nRF52480 Arm Cortex-M4F单片机@64MHz,1MB Flash, 256KB RAM以及BLE5.0的U-blox NINA B306模块;
  • 拓展–2x15-pin 拓展口包含GPIO,SPI,I2C,USART,PWM,ADC,DAC,复位,以及电源脚 (+5V, +3.3V,GND,Vin,AREF, …);
  • 传感器–9轴加速度计,陀螺仪,磁力计;
  • 调试–通过micro USB口,也支持6-pin SWD接口;
  • 尺寸–与原来的 Arduino Nano兼容;

Nano 33 BLE跟其他同尺寸的板子相比有着更低的功耗使得他更适合可穿戴设备和运动传感项目。同时因为支持蓝牙5.0,这板子也成为一些自动化项目的理想选择。

Arduino Nano BLE Sense板卡

Arduino Nano BLE Sense基本与Nano 33 BLE相同包含有额外的传感器和硬件加密模块:

  • 无线模块–基于Nordic nRF52480 Arm Cortex-M4F单片机@ 64MHz, 1MB Flash, 256KB RAM以及BLE5.0的 U-blox NINA B306 模块
  • 拓展–2x 15-pin 拓展口包含 GPIO, SPI, I2C, USART, PWM, ADC, DAC, 复位, 以及电源脚 (+5V, +3.3V, GND, Vin, AREF, …)
  • 传感器–9轴加速度计,陀螺仪,磁力计,温度,压力,湿度,光线,颜色,手势识别以及数字麦克风
  • 硬件加密模块 – Microchip ATECC608A 安全加密芯片
  • 调试–通过 micro USB 口, 也支持6-pin SWD接口
  • 尺寸–与原来的Arduino Nano兼容

板载的额外的传感器使得这板子支持自动化应用和互动式可穿戴设备应用。

Arduino Nano 33 BLE Sense

  • 基于nRF52840微控制器

  • 工作电压:3.3V

  • 输入电压(极限):21V

  • 单片机:nRF52840

  • 每个I / O引脚的直流电流15mA

  • 时钟速度64MHz

  • CPU闪存1MB

  • SRAM 256KB

  • 数字输入/输出引脚14

  • UART :1

  • SPI :1

  • I2C :1

  • 长度45毫米

  • 宽度18毫米

  • 重量5克

Machine Learning

该板的主要功能还在于可以使用TinyML在其上运行边缘计算应用程序(AI)。您可以使用TensorFlow™Lite创建机器学习模型,然后使用Arduino IDE将其上传到开发板上。

TinyML是一种微型机器学习。微型机器学习是机器学习和物联网设备的交集,它是一门新兴的工程学科,有可能在许多行业引发革命。

由于分布最广的物联网设备往往体积很小、电量有限。它们被作为终端硬件,通过嵌入式传感器采集各种数据;计算能力有限,对功耗极为敏感。某些情况下,将这类设备连接到边缘侧以便实现智能,在成本上并不划算。

TinyML将为数以亿计的物联网终端设备带来“生命”,它将引发的变革不容小觑。

而直接在微处理器中嵌入人工智能,成为消费和工业物联网场景的关键。这种方法并不依赖于外部程序,也不依赖边缘和云端。这种方案能够提供最佳的实时响应,同时对隐私提供极大保护。

消费者对于隐私问题的担忧,成为TinyML发展的推动力,很多公司为了响应消费者需求,正在开发功耗更低、响应速度更快、隐私保护更佳的设备。

具备TinyML的可穿戴设备,可以脱离云端持续监测用户的睡眠水平、心率体征等健康数据。TinyML胰岛素泵可以在不必时刻保持网络连接的情况下,根据血糖水平自动释放胰岛素。这些不必时刻联网的设备,让数据处于私有状态,更加安全并保护隐私。

且目前越来越多的物联网企业正在将分析的重点从视频转移到音频。而对音频的分析正是TinyML的一个发力点,TinyML可能即将开启音频分析的新蓝海。

一次挫折

我在一次测试中

验证成功,并成功烧录了

但是之后,Arduino无法被系统识别,端口无法识别,重新连接,系统提示无法识别usb设备

在网上收集资料和询问群友之后,我开始进行自救,毕竟作业还未开始,作业本就没了。欲哭无泪,我的300元啊。

在进行双击复位后,系统提示无法识别usb设备。

最后我在不指定端口的情况下,烧录了历程,设备成功复活,万岁!

活动任务

活动参与者可从下面两个任务中任选其一完成:

任务一:投篮运动手柄

利用NANO-33 BLE的加速度及角速度感应器,设计一款用于虚拟练习投篮的手柄。

投篮者可通过手持手柄(开发板)模拟投篮动作,而手柄会根据初始物理参数(可由用户设定或者系统默认值),对投篮者的命中率作出预判,并且可以将改进建议的信息反馈给投篮者。优秀的模拟投篮手柄的确可以帮助用户提高投篮命中率。

以下参数可作为参考,通常:

  • 篮筐高度:3.05m
  • 罚球线投篮距离:4.5m
  • 篮球质量:620g
任务二:环境监测站

利用NANO-33 BLE的传感器,搭建一个小型环境监测站用于监测户外环境。待监测的参数包括:

  • 周边环境温度(精度:±0.1°C, ±0.1°F)
  • 周边环境湿度(精度:±1%)
  • 大气压强(精度:±0.1kPa, ±0.1psi)
  • 日照强度(用于判断白天/夜晚)
  • 周边平均噪声(精度:±1dB)

其中任务一和任务二的数据信息反馈方式可采用以下任意一种方式:

  1. 通过对开发板外接显示屏显示
  2. 通过蓝牙在电脑端口显示
  3. 通过手机APP

代码展示

所用库

#include <Arduino_LPS22HB.h>
#include <Arduino_HTS221.h>
#include <Arduino_APDS9960.h>
#include <PDM.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

传感器数据读取

pressure = BARO.readPressure();

f_temperature = HTS.readTemperature(FAHRENHEIT);
c_temperature = (f_temperature - 32) / 1.8;

humidity    = HTS.readHumidity();


while ( APDS.colorAvailable()) {
  APDS.readColor(r, g, b, a);
  Serial.println("a:");
  Serial.println(a);
}

//计算周边平均噪声
while (!samplesRead);
{
  uint32_t sample_max = 0;
  for (int i = 0; i < samplesRead; i++) {
    if (sampleBuffer[i] < 0)
      sampleBuffer[i] = -sampleBuffer[i];
    if (sampleBuffer[i] > sample_max)
      sample_max = sampleBuffer[i];
  }
  sample = 24 * log10(sample_max * 5);
}
samplesRead = 0;

数据打印

//显示周边环境温度
display.print(F("Temperature:"));
display.print(c_temperature);
display.println(F("C"));

//显示周边环境湿度
display.print(F("Humidity:"));
display.print(humidity);
display.println(F("%"));

//显示大气压强
display.print(F("Atmosphere:"));
display.print(pressure);
display.println(F("kPa"));

//判断白天/夜晚
display.print(F("Irradiance:"));
if (a >= 3) {
  display.println(F("day "));
} else {
  display.println(F("night "));
}

//显示周边平均噪声
display.print(F("Noise:"));
display.print(sample);
display.println(F("dB"));

心得体会

本期的Arduino构架吸引来了很多人,但是一开始的进口清关,以及一些Digi-Key的失误打灭了很多人的热情,我的一个学弟也因此而退款放弃,很是可惜。

从个人来说,我轻视了Arduino,他比我想象中要难。我习惯了那种右键-跳转到申明的过程,Arduino这种近似“黑箱”的内部设计让我无从下手。加上事多,无法很好的进行深入学习,遗憾。